// 引入配置信息
import config from './config.js';

// 网络请求封装函数
export default function request(url, method, params,header) {
    console.log(url);
    // 返回一个Promise对象，用于处理异步请求
    return new Promise((resolve, reject) => {
        // 发起网络请求
        wx.request({
            url: config.baseUrl + url, // 完整的请求URL
            method: method, // 请求方法
            data: method === 'GET' ? params : JSON.stringify(params), // 根据请求方法设置参数格式
            // 设置请求头
            header: {
                'content-type': 'application/json'
            },
            success(res) {
                // 请求成功的回调
                console.log('响应拦截器success接口返回:', res);
                // 根据后端返回的状态码进行不同的处理
                switch (String(res.statusCode)) {
                    case '200': // 请求成功
                        resolve(res.data); // 将响应数据传递给Promise的resolve
                        break;
                    case '400': // 客户端请求错误
                        wx.showToast({
                            title: res.data.message || "请求有误，请检查您的输入或联系客服~",
                            icon: "none",
                            duration: 3000
                        });
                        reject(new Error(res.data.message || "客户端请求错误")); // 拒绝Promise并传递错误信息
                        break;
                    case '401': // 未授权
                        wx.showToast({
                            title: "身份验证已过期，请重新登陆~",
                            icon: "none",
                            duration: 2000
                        });
                        wx.redirectTo({
                            url: '/pages/login/login'
                        });
                        break;
                    case '403': // 禁止访问
                        wx.showToast({
                            title: "无权访问，请登录后再访问~",
                            icon: "none",
                            duration: 2000
                        });
                        wx.redirectTo({
                            url: '/pages/login/login'
                        });
                        break;
                    case '404': // 未找到资源
                        wx.showToast({
                            title: "系统出错啦，找不到资源~",
                            icon: "error",
                            duration: 2000
                        });
                        reject(new Error("未找到资源"));
                        break;
                    case '500': // 服务器内部错误
                        wx.showToast({
                            title: "服务器内部错误，请稍后再试~",
                            icon: "error",
                            duration: 2000
                        });
                        reject(new Error("服务器内部错误"));
                        break;
                    default: // 其他错误
                        wx.showToast({
                            title: "未知错误，请联系客服~",
                            icon: "error",
                            duration: 2000
                        });
                        reject(new Error("未知错误"));
                }
            },
            fail(err) {
                // 请求失败的回调
                console.error('请求失败:', err);
                wx.showToast({
                    title: "系统出现了意想不到的问题!",
                    icon: "none",
                    duration: 2000
                });
                reject(new Error("请求失败: " + (err.errMsg || "未知原因"))); // 拒绝Promise并传递错误信息
            }
        });
    });
}